package com.teamwork_backend.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.api.R;
import com.teamwork_backend.entity.ResumeEvaluate;
import com.teamwork_backend.entity.ResumePosition;
import com.teamwork_backend.mapper.ResumePositionDao;
import com.teamwork_backend.service.ResumePositionService;
import com.teamwork_backend.utils.DataResult;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author windy
 * @since 2021-04-25
 */
@RestController
@RequestMapping("/resume-position")
@Api(value = "ResumePositionController", tags = {"个人投递简历接口"})
public class ResumePositionController {
    // 注入数据模型
    @Autowired
    private ResumePositionService resumePositionService;


    /** 投递简历到某职位 */
    @PostMapping("sendResume") // Post方法
    @ApiOperation(value = "投递简历到某职位", notes = "投递简历到某职位", httpMethod = "POST")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult sendResume(
            @ApiParam(name = "userInfo", value = "投递简历信息对象", required = true)
            @RequestBody ResumePosition resumePosition)
    {
        // 更改对象属性
        resumePosition.setCheck(0);  // 被查看0否1是
        resumePosition.setStatus(1);  // 0拒绝 1处理中 2未进入面试 3进入面试
        // System.out.println(resumePosition);
        // 设置添加成功的返回标志
        boolean flag = resumePositionService.save(resumePosition);
        if(flag) {
            // 成功返回数据
            return DataResult.finished().message("简历投递成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("简历投递失败！");
        }
    }

    /** 投递简历查找列表 */
    @GetMapping("getlist") // Get方法
    @ApiOperation(value = "投递简历查找列表", notes = "投递简历查找列表", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "positionid", value = "职位唯一标示", required = true, dataType = "string")})
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult getlist(String positionid) {
        QueryWrapper<ResumePosition> wrapper = new QueryWrapper<>();
        wrapper.select().eq("positionid", positionid);
        List<ResumePosition> resumePosition = resumePositionService.list(wrapper);
        if(resumePosition != null) {
            // 成功返回数据
            return DataResult.finished().data("data", resumePosition).message("信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("信息不存在！");
        }
    }

    /** 查找已投递简历的列表 */
    @GetMapping("getlistbyuser") // Get方法
    @ApiOperation(value = "查找已投递简历的列表", notes = "查找已投递简历的列表", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "resumeid", value = "简历唯一标示", required = true, dataType = "string")})
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult getlistbyuser(String resumeid) {
        QueryWrapper<ResumePosition> wrapper = new QueryWrapper<>();
        wrapper.select().eq("resumeid", resumeid);
        List<ResumePosition> resumePosition = resumePositionService.list(wrapper);
        if(resumePosition != null) {
            // 成功返回数据
            return DataResult.finished().data("data", resumePosition).message("信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("信息不存在！");
        }
    }

    @Resource
    private ResumePositionDao resumePositionDao;
    /** 查找某公司收到的简历的列表 */
    @GetMapping("getlistbycompany") // Get方法
    @ApiOperation(value = "查找某公司收到的简历的列表", notes = "查找某公司收到的简历的列表", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyid", value = "公司唯一标示", required = true, dataType = "string")})
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult getlistbycompany(String companyid) {

        List<ResumePosition> resumePosition = resumePositionDao.getRPbyCompanyid(companyid);
        if(resumePosition != null) {
            // 成功返回数据
            return DataResult.finished().data("data", resumePosition).message("信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("信息不存在！");
        }
    }

    /** 更新投递简历 */
    @PostMapping("update") // Post方法
    @ApiOperation(value = "更新投递简历（可只更新状态）", notes = "更新投递简历", httpMethod = "POST")
    public DataResult update(
            @ApiParam(name = "ResumePosition", value = "简历投递对象", required = true)
            @RequestBody ResumePosition resumePosition)
    {
        //防止前端传的空字符串把后台数据复写，所以置为null
        //因为mybatis-plus默认更新策略是NOT_NULL：非 NULL；即通过接口更新数据时数据为NULL值时将不更新进数据库。
        resumePosition.setPositionid(null);
        resumePosition.setResumeid(null);
        resumePosition.setEvaluateid(null);

        // 设置添加成功的返回标志
        boolean flag = resumePositionService.updateById(resumePosition);
        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("更新投递简历状态成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("更新投递简历状态失败！");
        }
    }
}

